//
//  TrainingModel.swift
//  MoYoung
//
//  Created by sylar on 17/2/21.
//  Copyright © 2017年 sylar. All rights reserved.
//

import Foundation
import SQLite
import HandyJSON
import SwiftDate
import SQLiteValueExtension
import MYModule


/// 活动，不管是否运动，产生的步数， 卡路里， 时长都存于本表, 一天的步数在表中就一个
public class ActivityModel: NSObject, MYSQLiteTableiabe, FullDaySQLite, HandyJSON {
    
    public var adress: String = ""
    
    public var id: Int64 = 0
    
    /// 存储数据日期
    public var date: Date = Date().sqlDate()
    
    /// 总步数
    public var step: Int = 0
    
    /// 总消耗卡路里
    public var calorie: Int = 0
    
    /// 总使用时常
    public var time: Int = 0
    
    /// 总距离
    public var distance: Int = 0
    
    /// 目标总步数
    public var goalStep: Int = 0
    
    /// 目标总消耗卡路里
    public var goalCalorie: Int = 0
    
    /// 目标总使用时常
    public var goalTime: Int = 0
    
    /// 目标总距离
    public var goalDistance: Int = 0
    
    /// 是否是锻炼日 0： 不是 ，1： 是
    public var isTrainingDay: Int = 0
    
    /// 时长目标达成次数（一天最多2次）
    public var timeAchievement: Int = 0
    
    
    /// 卡路里目标达成次数（一天最多2次）
    public var calorieAchievement: Int = 0
    
    
    /// 步数目标达成次数（一天最多2次）
    public var stepAchievement: Int = 0
    
   
//    /// 步数详情(半小时归档一次)
    public var steps: [Int] {
        
        guard let model = StepArchiveModel.day(date: self.date) else {
            return (0 ..< 48).map {_ in 0}
        }
        
        return model.steps
    }
    
    /// 数据更新日期
    /// 注意： 步数归档更新日期 使用 stepsUpdateTime
    public var updateTime: Double = 0
    

    /// 距离单位
    public let distance_unit = "m"
    
    /// 卡路里单位
    public let calorie_unit = "cal"
    
    /// 时间单位
    public let time_unit = "s"
    
    public var isEmpty: Bool {
        
        return step == 0 
    }
    

    required public override init() {}
    
    
    /// 更新锻炼
    /// - Parameter start: 这一次数据来源的时间
    /// - Returns: 是否保存成功
    @discardableResult
    public func updateData() ->Bool {
        
        if step > 99999 {
            return false
        }
        
        if step < 0 {
            return false
        }
        
        guard let _ = ActivityModel.day(date: date) else {
            insert()
            return true
        }
        
        update()
        return true
        
    }
    

}


public class ActivityDetailModel: HandyJSON, StringValueExpressible {
    
    /// 步数
    public var step: Int = 0
    
    /// 消耗卡路里
    public var calorie: Int = 0
    
    /// 使用时常(秒)
    public var time: Int = 0
    
    /// 距离
    public var distance: Int = 0
    
    /// 使用时常单位
    public let time_unit = "s"
    
    /// 距离单位
    public let distance_unit = "m"
    
    /// 卡路里单位
    public let calorie_unit = "kCal"
    
    public static func fromStringValue(_ stringValue: String) -> ActivityDetailModel {
        return deserialize(from: stringValue) ?? ActivityDetailModel()
    }
    
    public var stringValue: String {
        self.toJSONString() ?? ""
        
    }
    
    required public init() {}
    
}
